let fields = $this.fields;
console.log("属性数组 = ",fields)
let xmrwtarget = [
    "separator_1718345134619_XSHix", //项目任务
    "selectStr_1718345029613_IWjr8", //选择项目立项
    "input_1718345101976_ZNGth", //项目编号
]

let yfxmrwtarget = [
    "separator_1718345134619_XSHix", //项目任务
    "selectStr_1756173477473_dxVFk", //选择研发立项
    "input_1718345101976_ZNGth", //项目编号
]
//项目任务
if ($this.model === "88b3d81abfc18c0a0dffe358db029aa8") {
    console.log("项目任务 中 获取属性",$this.fields)
    toggleStatus(fields, (table, field) => {
        console.log(`项目任务，获取字段的isShow属性 ？`, field)
        field['isShow'] = true;
    }, xmrwtarget)
}
//研发项目任务
if ($this.model === "38ffeca8a8ef9049c03d3931c8e8d92c") {
    console.log("研发项目任务 中 获取属性",$this.fields)
    toggleStatus(fields, (table, field) => {
        console.log(`研发项目任务，获取字段的isShow属性 ？`, field)
        field['isShow'] = true;
        console.log("清空项目任务字段 = ",field.name)
        // empty(field.name);
    }, yfxmrwtarget)
}

/**
 * 通用改变属性状态函数
 * @param {any[]} fields 属性数组
 * @param {(table: any, field: any) => void} callback 回调函数
 * @param {string | string[]} target 待修改属性名称数组（目标数组）
 * @param {any} table 表体模型 （页面属性集合）
 */
//callback 某个操作完成后执行特定的逻辑
function toggleStatus(fields, callback, target, table = null) {
    //Object.values(fields) 返回一个数组【对象所有值】; flat(Infinity)数组进行无限级扁平化,无论数组嵌套了多少层，都会被完全展开
    //方便递归找strName、name属性！
    const arr = Object.values(fields).flat(Infinity);

    var fieldVal = Object.values(fields);
    console.log("fields对象转数组 = ",fieldVal)
    console.log("数组无限级扁平化 = ",fieldVal.flat(Infinity))

    for (let i = 0; i < arr.length; i++) {
        const field = arr[i];
        console.log("对象数组 = ",field);

        let fieldTemp = null;
        console.log("field 中的 strName = ",field['strName'],",name = ",field['name'],"区别！")
        if(field['strName']){
            fieldTemp = field['strName']
        }else{
            if(field['name']){
                fieldTemp = field['name']
            }else{
                fieldTemp = ''
            }
        }

        //对象 fieldTemp 和一个目标数组 target，在 fieldTemp 中找到与 target 匹配的字段
        if (target.includes(fieldTemp)) {
            //将 table 和 field 作为参数传递给回调函数 callback
            callback && callback(table, field);
        }
        if (field.tableColumns) {
            //递归处理嵌套的字段
            toggleStatus(field.tableColumns, callback, target, field);
        }
    }
}

//和显示/隐藏配套使用的，隐藏的时候，那些被隐藏的字段值要清空
//表体数据
let modelTemp = null
if($this.formModel){
    modelTemp = $this.formModel
}else{
    if($this.model){
        modelTemp = $this.model
    }else{
        modelTemp = $this.$this.saveModel
    }
}
function empty(
    fieldNames, //表头属性名称
    tableInnerFieldName = '', //表体属性名称
    tableInnerField = false, //表体属性默认不清空
    // model = $this.formModel ? $this.formModel : $this.model ? $this.model : $this.saveModel,
    model = modelTemp
) {
    if (!fieldNames || (Array.isArray(fieldNames) && fieldNames.length === 0)) {
        // 如果参数非法终止执行
        return;
    }
    let targetList;
    console.log("获取所有属性名",fieldNames)
    //检查 fieldNames 是否是数组类型
    //Object.prototype.toString 返回对象类型字符串
    //call 函数应用到任何变量上【数组、对象、字符串】
    //fieldNames 赋值给 targetList
    if (Object.prototype.toString.call(fieldNames) === '[object Array]') {
        targetList = fieldNames;
    } else {
        if (Object.prototype.toString.call(fieldNames) !== '[object String]') {
            // 参数非法终止执行
            return;
        }
        //否则转化为数组
        if (fieldNames.includes(',')) {
            targetList = fieldNames.split(',');
        } else {
            targetList = [fieldNames];
        }
    }

    //遍历 targetList 中的字段名称，并根据字段在 model 中的值类型进行相应的处理
    for (let i = 0; i < targetList.length; i++) {
        const fieldName = targetList[i];
        if (model[fieldName]) {
            switch (Object.prototype.toString.call(model[fieldName])) {
                case '[object String]':
                    model[fieldName] = '';
                    break;
                case '[object Number]':
                    model[fieldName] = 0;
                    break;
                case '[object Object]':
                    //业务：检查 model[fieldName] 对象是否有一个名为 _d 的自有属性
                    //Object.hasOwn 对象是否具有指定的自有属性（即不是继承的属性）不会被对象的原型链影响
                    if (Object.hasOwn(model[fieldName], '_d')) {
                        model[fieldName] = '';
                    } else {
                        model[fieldName] = {};
                    }
                    break;
                case '[object Array]': //数组
                    if (!tableInnerField) { //表体属性字段
                        model[fieldName].length = 0;
                    } else {
                        const arr = Object.values(model[fieldName]);
                        //表体属性字段中的每个子元素
                        for (let i = 0; i < arr.length; i++) {
                            const rowModel = arr[i];
                            empty(tableInnerFieldName, '', true, rowModel);
                        }
                    }
                    break;
                default:
                    break;
            }
        }
    }
}